<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Curry (programming language)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Curry_(programming_language)"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Curry_programming_language rootpage-Curry_programming_language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Curry (programming language)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">This article is about the programming language Curry (named in honour of a mathematician and logician). For the mathematician and logician, see <a href="Haskell_Curry" title="Haskell Curry">Haskell Curry</a>. For the computer science technique, see <a href="Currying" title="Currying">Currying</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">Curry</th></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigm</a></th><td class="infobox-data"><a href="Functional_programming" title="Functional programming">functional</a>, <a href="Logic_programming" title="Logic programming">logic</a>, non-strict, modular</td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed by</a></th><td class="infobox-data">Michael Hanus, Sergio Antoy, et al.</td></tr><tr><th scope="row" class="infobox-label"><a href="Software_developer" class="mw-redirect" title="Software developer">Developer</a></th><td class="infobox-data organiser"><a href="Kiel_University" title="Kiel University">Kiel University</a><br><a href="Ludwig_Maximilian_University_of_Munich" title="Ludwig Maximilian University of Munich">Ludwig Maximilian University of Munich</a><br><a href="University_of_M%C3%BCnster" title="University of Münster">University of Münster</a><br><a href="Portland_State_University" title="Portland State University">Portland State University</a><br><a href="Complutense_University_of_Madrid" title="Complutense University of Madrid">Complutense University of Madrid</a><br><a href="Technical_University_of_Madrid" title="Technical University of Madrid">Technical University of Madrid</a></td></tr><tr><th scope="row" class="infobox-label">First appeared</th><td class="infobox-data">1995<span style="display:none"> (<span class="bday dtstart published updated">1995</span>)</span></td></tr><tr><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">3.8.0<sup id="cite_ref-wikidata-7eb93ef8ace7854bc8bb0d3f536c34ea1acbdc30-v20_1-0" class="reference"><a href="#cite_note-wikidata-7eb93ef8ace7854bc8bb0d3f536c34ea1acbdc30-v20-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
/ (7 April 2025)</div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="Static_typing" class="mw-redirect" title="Static typing">static</a>, <a href="Strong_and_weak_typing" title="Strong and weak typing">strong</a>, <a href="Type_inference" title="Type inference">inferred</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data"><a href="X86-64" title="X86-64">x86-64</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Operating_system" title="Operating system">OS</a></th><td class="infobox-data"><a href="Cross-platform_software" title="Cross-platform software">Cross-platform</a>: <a href="Linux" title="Linux">Linux</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="BSD_licenses" title="BSD licenses">BSD</a> 3-clause</td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://www.curry-lang.org">www<wbr>.curry-lang<wbr>.org</a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Major <a href="Programming_language_implementation" title="Programming language implementation">implementations</a></th></tr><tr><td colspan="2" class="infobox-full-data"><a rel="nofollow" class="external text" href="https://www.curry-lang.org/pakcs">PAKCS</a> (<a href="Prolog" title="Prolog">Prolog</a> target), <a rel="nofollow" class="external text" href="http://danae.uni-muenster.de/curry/">mcc</a> (<a href="C_(programming_language)" title="C (programming language)">C</a> target), <a rel="nofollow" class="external text" href="https://www.curry-lang.org/kics2/">KiCS2</a> (<a href="Haskell" title="Haskell">Haskell</a> target)</td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="Haskell" title="Haskell">Haskell</a>, <a href="Prolog" title="Prolog">Prolog</a></td></tr></tbody></table>
<p><b>Curry</b> is a <a href="Declarative_programming" title="Declarative programming">declarative programming</a> language, an implementation of the <a href="Functional_logic_programming" title="Functional logic programming">functional logic programming</a> paradigm,<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> and based on the <a href="Haskell" title="Haskell">Haskell</a> language. It merges elements of functional and logic programming,<sup id="cite_ref-Curry_and_Curl_programming_languages_5-0" class="reference"><a href="#cite_note-Curry_and_Curl_programming_languages-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> including <a href="Constraint_programming" title="Constraint programming">constraint programming</a> integration.
</p><p>It is nearly a superset of Haskell but does not support all language extensions of Haskell. In contrast to Haskell, Curry has built-in support for non-deterministic computations involving search.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Foundations_of_functional_logic_programming">Foundations of functional logic programming</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Basic_concepts">Basic concepts</h3></div>
<p>A functional program is a set of functions defined by equations or rules. A functional computation consists of replacing subexpressions by equal (with regard to the function definitions) subexpressions until no more replacements (or reductions) are possible and a value or normal form is obtained. For instance, consider the function double defined by
</p>
<pre>double x = x+x
</pre>
<p>The expression “<style data-mw-deduplicate="TemplateStyles:r886049734">
/* start https://en.wikipedia.org/ */
.mw-parser-output .monospaced{font-family:monospace,monospace}
/* end https://en.wikipedia.org/ */
</style><span class="monospaced">double 1</span>” is replaced by <span class="monospaced">1+1</span>. The latter can be replaced by <span class="monospaced">2</span> if we interpret the operator “<span class="monospaced">+</span>” to be defined by an infinite set of equations, e.g., <span class="monospaced">1+1 = 2</span>, <span class="monospaced">1+2 = 3</span>, etc. In a similar way, one can evaluate nested expressions (where the subexpressions to be replaced are quoted):
</p>
<pre>'double (1+2)' → '(1+2)'+(1+2) → 3+'(1+2)' → '3+3' → 6
</pre>
<p>There is also another order of evaluation if we replace the arguments of operators from right to left:
</p>
<pre>'double (1+2)' → (1+2)+'(1+2)' → '(1+2)'+3 → '3+3' → 6
</pre>
<p>In this case, both derivations lead to the same result, a property known as <a href="Confluence_(term_rewriting)" class="mw-redirect" title="Confluence (term rewriting)">confluence</a>. This follows from a fundamental property of pure functional languages, termed <a href="Referential_transparency" title="Referential transparency">referential transparency</a>: the value of a computed result does not depend on the order or time of evaluation, due to the absence of <a href="Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>. This simplifies reasoning about, and maintaining, pure functional programs.
</p><p>As many functional languages like <a href="Haskell" title="Haskell">Haskell</a> do, Curry supports the definition of <a href="Algebraic_data_type" title="Algebraic data type">algebraic data types</a> by enumerating their constructors. For instance, the type of Boolean values consists of the constructors <span class="monospaced">True</span> and <span class="monospaced">False</span> that are declared as follows:
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="kr">data</span><span class="w"> </span><span class="kt">Bool</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">True</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kt">False</span>
</pre></div>
<p>Functions on Booleans can be defined by pattern matching, i.e., by providing several equations for different argument values:
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="n">not</span><span class="w"> </span><span class="kt">True</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">False</span>
<span class="w"> </span><span class="n">not</span><span class="w"> </span><span class="kt">False</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">True</span>
</pre></div>
<p>The principle of replacing equals by equals is still valid provided that the actual arguments have the required form, e.g.:
</p>
<pre>not '(not False)' → 'not True' → False
</pre>
<p>More complex <a href="Data_structure" title="Data structure">data structures</a> can be obtained by <a href="Recursive_data_type" title="Recursive data type">recursive data types</a>. For instance, a list of elements, where the type of elements is arbitrary (denoted by
the type variable <span class="monospaced">a</span>), is either the empty list “<span class="monospaced">[]</span>” or the non-empty list “<span class="monospaced">x:xs</span>” consisting of a first element <span class="monospaced">x</span> and a list <span class="monospaced">xs</span>:
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="kr">data</span><span class="w"> </span><span class="kt">List</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="kt">List</span><span class="w"> </span><span class="n">a</span>
</pre></div>
<p>The type “<span class="monospaced">List a</span>” is usually written as <span class="monospaced">[a]</span> and finite lists x1<span class="monospaced">:</span>x2<span class="monospaced">:</span>...<span class="monospaced">:</span>xn<span class="monospaced">:[]</span> are written as <span class="monospaced">[</span>x1<span class="monospaced">,</span>x2<span class="monospaced">,</span>...<span class="monospaced">,</span>xn<span class="monospaced">]</span>. We can define operations on recursive types by inductive definitions where pattern matching supports the convenient separation of the different cases. For instance, the concatenation operation “<span class="monospaced">++</span>” on polymorphic lists can be defined as follows (the optional type declaration in the first line specifies that “<span class="monospaced">++</span>” takes two lists as input and produces an output list, where all list elements are of the same unspecified type):
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="p">(</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="ow">::</span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span><span class="w"> </span><span class="ow">-></span><span class="w"> </span><span class="p">[</span><span class="n">a</span><span class="p">]</span><span class="w"> </span>
<span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="o">++</span><span class="w"> </span><span class="n">ys</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">ys</span><span class="w"> </span>
<span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">xs</span><span class="p">)</span><span class="w"> </span><span class="o">++</span><span class="w"> </span><span class="n">ys</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">xs</span><span class="o">++</span><span class="n">ys</span>
</pre></div>
<p>Beyond its application for various programming tasks, the operation “<span class="monospaced">++</span>” is also useful to specify the behavior of other functions on lists. For instance, the behavior of a function last that yields the last element of a list can be specified as follows: for all lists xs and elements e, <span class="monospaced">last</span> xs = e if ∃ys<span class="monospaced">:</span>ys<span class="monospaced">++[</span>e<span class="monospaced">]</span> = xs.
</p><p>Based on this specification, one can define a function that satisfies this specification by employing logic programming features. Similarly to logic languages, functional logic languages provide search for solutions for existentially quantified variables. In contrast to pure logic languages, they support equation solving over nested functional expressions so that an equation like ys<span class="monospaced">++[</span>e<span class="monospaced">]</span> = <span class="monospaced">[1,2,3]</span> is solved by instantiating ys to the list <span class="monospaced">[1,2]</span> and e to the value <span class="monospaced">3</span>. In Curry one can define the operation last as follows:
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ys</span><span class="o">++</span><span class="p">[</span><span class="n">e</span><span class="p">]</span><span class="w"> </span><span class="o">=:=</span><span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">e</span><span class="w"> </span><span class="kr">where</span><span class="w"> </span><span class="n">ys</span><span class="p">,</span><span class="n">e</span><span class="w"> </span><span class="n">free</span>
</pre></div>
<p>Here, the symbol “<span class="monospaced">=:=</span>” is used for equational constraints in order to provide a syntactic distinction from defining equations. Similarly, extra variables (i.e., variables not occurring in the left-hand side of the defining equation) are explicitly declared by “<span class="monospaced">where...free</span>” in order to provide some opportunities to detect bugs caused by typos. A conditional equation of the form l <span class="monospaced">|</span> c <span class="monospaced">=</span> r is applicable for reduction if its condition c has been solved. In contrast to purely functional languages where conditions are only evaluated to a Boolean value, functional logic languages support the solving of conditions by guessing values for the unknowns in the condition. Narrowing as discussed in the next section is used to solve this kind of conditions.
</p>
<div class="mw-heading mw-heading3"><h3 id="Narrowing">Narrowing</h3></div>
<p>Narrowing is a mechanism whereby a variable is <a href="Name_binding" title="Name binding">bound</a> to a value selected from among alternatives imposed by constraints. Each possible value is tried in some order, with the remainder of the program invoked in each case to determine the validity of the binding. Narrowing is an extension of logic programming, in that it performs a similar search, but can actually generate values as part of the search rather than just being limited to testing them.
</p><p>Narrowing is useful because it allows a function to be treated as a relation: its value can be computed "in both directions". The Curry examples of the previous section illustrate this.
</p><p>As noted in the prior section, narrowing can be thought of as reduction on a program term graph, and there are often many different ways (<i>strategies</i>) to reduce a given term graph. Antoy et al.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> proved in the 1990s that a particular narrowing strategy, <i>needed narrowing</i>, is optimal in the sense of doing a number of reductions to get to a "normal form" corresponding to a solution that is minimal among sound and complete strategies. Needed narrowing corresponds to a lazy strategy, in contrast to the <a href="SLD_resolution" title="SLD resolution">SLD-resolution</a> strategy of <a href="Prolog" title="Prolog">Prolog</a>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Functional_patterns">Functional patterns</h3></div>
<p>The rule defining <span class="monospaced">last</span> shown above expresses the fact that the actual argument must match the result of narrowing the expression <span class="monospaced">ys++[e]</span>. Curry can express this property also in the following more concise way:
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="n">last</span><span class="w"> </span><span class="p">(</span><span class="n">ys</span><span class="o">++</span><span class="p">[</span><span class="n">e</span><span class="p">])</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">e</span>
</pre></div>
<p>Haskell does not allow such a declaration since the pattern in the left-hand side contains a defined function (<span class="monospaced">++</span>). Such a pattern is also called <i>functional pattern</i>.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Functional patterns are enabled by the combined functional and logic features of Curry and support concise definitions of tasks requiring deep pattern matching in hierarchical data structures.
</p>
<div class="mw-heading mw-heading3"><h3 id="Non-determinism">Non-determinism</h3></div>
<p>Since Curry is able to solve equations containing function calls with unknown values, its execution mechanism is based on non-deterministic computations, similarly to logic programming. This mechanism supports also the definition of <i>non-deterministic operations</i>, i.e., operations that delivers more than one result for a given input. The archetype of non-deterministic operations is the predefined infix operation <span class="monospaced">?</span>, called <i>choice</i> operator, that returns one of its arguments. This operator is defined by the following rules:
</p>
<pre> x ? y = x
x ? y = y
</pre>
<p>Thus, the evaluation of the expression <span class="monospaced">0 ? 1</span> returns <span class="monospaced">0</span> as well as <span class="monospaced">1</span>. Computing with non-deterministic operations and computing with free variables by narrowing has the same expressive power.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>
</p><p>The rules defining <span class="monospaced">?</span> show an important feature of Curry: all rules are tried in order to evaluate some operation. Hence, one can define by
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="n">insert</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="n">ys</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">ys</span>
<span class="w"> </span><span class="n">insert</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="kt">:</span><span class="n">ys</span><span class="p">)</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="kt">:</span><span class="w"> </span><span class="n">insert</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="n">ys</span>
</pre></div>
<p>an operation to insert an element into a list at an indeterminate position so that the operation <span class="monospaced">perm</span> defined by
</p>
<div class="mw-highlight mw-highlight-lang-haskell mw-content-ltr" dir="ltr"><pre><span class="w"> </span><span class="n">perm</span><span class="w"> </span><span class="kt">[]</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="kt">[]</span>
<span class="w"> </span><span class="n">perm</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="kt">:</span><span class="n">xs</span><span class="p">)</span><span class="w"> </span><span class="ow">=</span><span class="w"> </span><span class="n">insert</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="p">(</span><span class="n">perm</span><span class="w"> </span><span class="n">xs</span><span class="p">)</span>
</pre></div>
<p>returns any permutation of a given input list.
</p>
<div class="mw-heading mw-heading3"><h3 id="Strategies">Strategies</h3></div>
<p>Due to the absence of side effects, a functional logic program can be executed with different strategies. To evaluate expressions, Curry uses a variant of the <i>needed narrowing</i> strategy which combines <a href="Lazy_evaluation" title="Lazy evaluation">lazy evaluation</a> with non-deterministic search strategies. In contrast to Prolog, which uses backtracking to search for solutions, Curry does not fix a particular search strategy. Hence, there are implementations of Curry, like <a rel="nofollow" class="external text" href="https://www.curry-lang.org/kics2/">KiCS2</a>, where the user can easily select a search strategy, like <a href="Depth-first_search" title="Depth-first search">depth-first search</a> (backtracking), <a href="Breadth-first_search" title="Breadth-first search">breadth-first search</a>, iterative deepening, or parallel search.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementations_and_programming_tools">Implementations and programming tools</h2></div>
<p>There are various implementations of Curry available. The most prominent representatives are the Portland Aachen Kiel Curry System <a rel="nofollow" class="external text" href="https://www.curry-lang.org/pakcs/">PAKCS</a> which compiles Curry programs into <a href="Prolog" title="Prolog">Prolog</a>, the Kiel Curry System <a rel="nofollow" class="external text" href="https://www.curry-lang.org/kics2/">KiCS2</a> which compiles Curry programs into <a href="Haskell" title="Haskell">Haskell</a>, the Münster Curry Compiler <a rel="nofollow" class="external text" href="http://danae.uni-muenster.de/curry/">MCC</a>, and <a rel="nofollow" class="external text" href="https://www.curry-lang.org/curry2go/">Curry2Go</a> which compiles Curry programs into <a href="Go_(programming_language)" title="Go (programming language)">Go</a> programs and supports fair parallel search by mapping non-deterministic evaluations into <a href="Light-weight_process" title="Light-weight process">light-weight processes</a> (goroutines).
</p><p>To support programming in Curry, there is a collection of <a rel="nofollow" class="external text" href="https://cpm.curry-lang.org/">Curry software packages</a>, a <a rel="nofollow" class="external text" href="https://cpm.curry-lang.org/currygle/">Curry API search engine</a>, a <a rel="nofollow" class="external text" href="https://github.com/fwcd/curry-language-server">Curry language server</a> providing <a href="Integrated_development_environment" title="Integrated development environment">IDE</a> support, e.g., in <a href="Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a>, as well as various program documentation and analysis tools.
</p>
<div class="mw-heading mw-heading2"><h2 id="Discussion_and_further_reading">Discussion and further reading</h2></div>
<p><a href="John_Alan_Robinson" title="John Alan Robinson">John Alan Robinson</a> discussed in his invited CL2000 paper<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> the integration of functional programming with logic programming where he wrote: "It is inexplicable that the two idioms have been kept apart for so long within the computational logic repertory. We need a single programming language in which both kinds of programming are possible and can be used in combination with each other." He surveyed different attempts and concluded that Curry is the "most promising one".
</p><p>The textbook <sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> about principles and practice of programming languages contains a chapter on programming in Curry.
</p>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-wikidata-7eb93ef8ace7854bc8bb0d3f536c34ea1acbdc30-v20-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-7eb93ef8ace7854bc8bb0d3f536c34ea1acbdc30-v20_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.curry-lang.org/pakcs/download.html">"PAKCS Version 3.8.0 (07/04/25)"</a>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFHanus" class="citation web cs1">Hanus, Michael (ed.). <a rel="nofollow" class="external text" href="https://www.curry-lang.org/documentation/report/">"Curry: A Truly Integrated Functional Logic Language"</a>.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFSergioHanus2010" class="citation journal cs1">Sergio, Antoy; Hanus, Michael (2010). "Functional Logic Programming". <i>Communications of the ACM</i>. <b>53</b> (4). ACM: <span class="nowrap">74–</span>85. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1721654.1721675">10.1145/1721654.1721675</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14578759">14578759</a>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFHanus2013" class="citation book cs1">Hanus, Michael (2013). "Functional Logic Programming: From Theory to Curry". <i>Programming Logics - Essays in Memory of Harald Ganzinger</i>. Lecture Notes in Computer Science. Vol. 7797. pp. <span class="nowrap">123–</span>168. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-3-642-37651-1_6">10.1007/978-3-642-37651-1_6</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-642-37650-4</bdi>.</cite></span>
</li>
<li id="cite_note-Curry_and_Curl_programming_languages-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-Curry_and_Curl_programming_languages_5-0">^</a></b></span> <span class="reference-text">
<cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.mvps.net/docs/curry-and-curl-programming-languages">"Curry experimental programming language"</a>. <i>MVPS.net</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2 September</span> 2021</span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFSergioEchahedHanus2000" class="citation journal cs1">Sergio, Antoy; Echahed, Rachid; Hanus, Michael (2000). "A Needed Narrowing Strategy". <i>Journal of the ACM</i>. <b>47</b> (4). ACM: <span class="nowrap">776–</span>822. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F347476.347484">10.1145/347476.347484</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0004-5411">0004-5411</a>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:47275506">47275506</a>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite id="CITEREFAntoyHanus2006" class="citation book cs1">Antoy, Sergio; Hanus, Michael (2006). "Declarative Programming with Function Patterns". <i>Logic Based Program Synthesis and Transformation</i>. Lecture Notes in Computer Science. Vol. 3901. pp. <span class="nowrap">6–</span>22. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F11680093_2">10.1007/11680093_2</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-540-32654-0</bdi>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><cite id="CITEREFAntoyHanus2006" class="citation book cs1">Antoy, Sergio; Hanus, Michael (2006). "Overlapping Rules and Logic Variables in Functional Logic Programs". <i>Logic Programming</i>. Lecture Notes in Computer Science. Vol. 4079. pp. <span class="nowrap">87–</span>101. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F11799573_9">10.1007/11799573_9</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-540-36635-5</bdi>.</cite></span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFRobinson2000" class="citation book cs1">Robinson, John Alan (2000). "Computational Logic: Memories of the Past and Challenges for the Future". <i>First International Conference on Computational Logic (CL 2000)</i>. Lecture Notes in Computer Science. Vol. 1861. pp. <span class="nowrap">1–</span>24. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F3-540-44957-4_1">10.1007/3-540-44957-4_1</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-3-540-67797-0</bdi>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite id="CITEREFLoudenLambert2012" class="citation book cs1">Louden, Kenneth C.; Lambert, Kenneth A. (2012). <i>Programming Languages - Principles and Practice</i>. Cengage Learning. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-111-57763-6</bdi>.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://www.curry-lang.org">Official website</a></span></span></li>
<li><a rel="nofollow" class="external text" href="https://smap.curry-lang.org/">Smap</a> - A web-based execution environment for Curry and Haskell with various example programs</li>
<li><a rel="nofollow" class="external text" href="https://cpm.curry-lang.org/">Curry packages</a> - A collection of software packages for Curry</li>
<li><a rel="nofollow" class="external text" href="http://danae.uni-muenster.de/curry/">MCC</a> - The Münster Curry Compiler, targets <a href="C_(programming_language)" title="C (programming language)">C</a></li>
<li><a rel="nofollow" class="external text" href="https://www.curry-lang.org/pakcs/">PAKCS</a> A major Curry implementation, targets <a href="Prolog" title="Prolog">Prolog</a></li>
<li><a rel="nofollow" class="external text" href="https://www.curry-lang.org/kics2/">KiCS2</a> A Curry implementation, targets <a href="Haskell" title="Haskell">Haskell</a></li>
<li><a rel="nofollow" class="external text" href="https://www.curry-lang.org/curry2go/">Curry2Go</a> A Curry implementation, targets <a href="Go_(programming_language)" title="Go (programming language)">Go</a>, and supports fair parallel search</li>
<li><a rel="nofollow" class="external text" href="https://github.com/curry-language/">GitHub repositories</a> with Curry implementations and tools</li>
<li><a rel="nofollow" class="external text" href="https://curry-lang.org/various/mailinglist/">Curry Mailing List</a></li>
<li><a rel="nofollow" class="external text" href="http://www.michaelhanus.de/">Michael Hanus's home page</a></li>
<li><i><a rel="nofollow" class="external text" href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.148.524">Purely Functional Lazy Non-deterministic Programming</a></i> (Fischer, Kiselyov, Shan, 2009), <i><a rel="nofollow" class="external text" href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.157.4578">Transforming Functional Logic Programs into Monadic Functional Programs</a></i> (Braßel, Fischer, Hanus, Reck, 2010) on modeling lazy non-deterministic (logic) programming (like in Curry) in a purely functional language (<a href="Haskell" title="Haskell">Haskell</a>); such approach might give the programmer more flexibility in the control over the strategies that—in the case of Curry—are built-in.</li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Haskell_programming542" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Haskell_programming542" style="font-size:114%;margin:0 4em"><a href="Haskell" title="Haskell">Haskell</a> programming</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Software" title="Software">Software</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language_implementation" title="Programming language implementation">Implementations</a><br>(<a href="Haskell_features" title="Haskell features">features</a>)</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Generic_programming#Generic_Haskell" title="Generic programming">Generic Haskell</a>°</li>
<li><a href="Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">Glasgow Haskell Compiler</a>°
<ul><li><a href="Template_Haskell" title="Template Haskell">Template Haskell</a>°</li></ul></li>
<li><i><a href="Gofer_(programming_language)" title="Gofer (programming language)">Gofer</a></i>° → <a href="Hugs_(interpreter)" title="Hugs (interpreter)">Hugs</a>°</li>
<li><i>York Haskell Compiler</i>° (<i><a href="Yhc" title="Yhc">Yhc</a></i>)</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Dialect_(computing)" class="mw-redirect" title="Dialect (computing)">Dialects</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Agda_(programming_language)" title="Agda (programming language)">Agda</a>°</li>
<li><a href="Cryptol" title="Cryptol">Cryptol</a>°</li>
<li>°</li>
<li><a href="Elm_(programming_language)" title="Elm (programming language)">Elm</a>°</li>
<li><i><a href="Hume_(programming_language)" title="Hume (programming language)">Hume</a></i>°</li>
<li><a href="Idris_(programming_language)" title="Idris (programming language)">Idris</a>°</li>
<li><i><a href="%CE%A9mega" title="Ωmega">Ωmega</a></i>°</li>
<li><i><a href="Orwell_(programming_language)" title="Orwell (programming language)">Orwell</a></i>°</li>
<li><i><a href="Pugs_(compiler)" title="Pugs (compiler)">Pugs</a></i>°</li>
<li><a href="PureScript" title="PureScript">PureScript</a>°</li>
<li><a href="TidalCycles" title="TidalCycles">TidalCycles</a>°</li>
<li><a href="Ur_(programming_language)" title="Ur (programming language)">Ur</a>°</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Electronic_design_automation" title="Electronic design automation">Electronic design</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Atom_(programming_language)" title="Atom (programming language)">Atom</a>°</li>
<li><a href="Bluespec" title="Bluespec">Bluespec</a> <a href="SystemVerilog" title="SystemVerilog">SystemVerilog</a> (BSV)</li></ul>
</div></td></tr></tbody></table><div></div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Library_(computing)" title="Library (computing)">Libraries</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Concurrent_Haskell" title="Concurrent Haskell">Concurrent Haskell</a>°</li>
<li><i><a href="Haskell_Platform" title="Haskell Platform">Haskell Platform</a></i>°</li>
<li><a href="Parsec_(parser)" title="Parsec (parser)">Parsec</a>°</li>
<li><a href="QuickCheck" title="QuickCheck">QuickCheck</a>°</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Package_manager" title="Package manager">Package managers</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Cabal_(software)" title="Cabal (software)">Cabal</a>°</li>
<li><a href="Stack_(Haskell)" title="Stack (Haskell)">Stack</a>°</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Windowing_system" title="Windowing system">Windowing systems</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Fudgets" title="Fudgets">Fudgets</a></li>
<li><a href="WxHaskell" title="WxHaskell">wxHaskell</a>°</li>
<li><a href="Xmonad" title="Xmonad">xmonad</a>°</li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Web_framework" title="Web framework">Web frameworks</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Servant_(web_framework)" title="Servant (web framework)">Servant</a>°</li>
<li><a href="Snap_(web_framework)" title="Snap (web framework)">Snap</a>°</li>
<li><a href="Yesod_(web_framework)" title="Yesod (web framework)">Yesod</a>°</li></ul>
</div></td></tr><tr><td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Cardano_(blockchain_platform)" title="Cardano (blockchain platform)">Cardano</a>°</li>
<li><a href="Darcs" title="Darcs">Darcs</a>°</li>
<li><a href="Ganeti" title="Ganeti">Ganeti</a>°</li>
<li><a href="Git-annex" title="Git-annex">git-annex</a>°</li>
<li><a href="Haddock_(software)" title="Haddock (software)">Haddock</a>°</li>
<li><a href="HaXml" title="HaXml">HaXml</a>°</li>
<li><a href="Liquid_Haskell" title="Liquid Haskell">Liquid Haskell</a>°</li>
<li><a href="LOLITA" title="LOLITA">LOLITA</a></li>
<li><a href="Pandoc" title="Pandoc">Pandoc</a>°</li>
<li><i><a href="Paradox_(theorem_prover)" title="Paradox (theorem prover)">Paradox</a></i>°</li>
<li><a href="SQream_DB" title="SQream DB">SQream DB</a></li></ul>
</div></td></tr></tbody></table><div></div></td><td class="noviewer navbox-image" rowspan="3" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Book</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Real_World_Haskell" title="Real World Haskell">Real World Haskell</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Community_of_practice" title="Community of practice">Community</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th id="Eponym10" scope="row" class="navbox-group" style="width:1%"><a href="Eponym" title="Eponym">Eponym</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Haskell_Curry" title="Haskell Curry">Haskell Curry</a></li></ul>
</div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Arvind_(computer_scientist)" title="Arvind (computer scientist)">Arvind</a></li>
<li><a href="Lennart_Augustsson" title="Lennart Augustsson">Lennart Augustsson</a></li>
<li><a href="Richard_Bird_(computer_scientist)" title="Richard Bird (computer scientist)">Richard Bird</a></li>
<li><a href="Jeremy_Gibbons" title="Jeremy Gibbons">Jeremy Gibbons</a></li>
<li><a href="Andrew_D._Gordon" title="Andrew D. Gordon">Andrew D. Gordon</a></li>
<li><a href="Paul_Hudak" title="Paul Hudak">Paul Hudak</a></li>
<li><a href="John_Hughes_(computer_scientist)" title="John Hughes (computer scientist)">John Hughes</a></li>
<li><a href="John_Launchbury" title="John Launchbury">John Launchbury</a></li>
<li><a href="John_MacFarlane_(philosopher)" title="John MacFarlane (philosopher)">John MacFarlane</a></li>
<li><a href="Simon_Marlow" title="Simon Marlow">Simon Marlow</a></li>
<li><a href="Conor_McBride" title="Conor McBride">Conor McBride</a></li>
<li><a href="Erik_Meijer_(computer_scientist)" title="Erik Meijer (computer scientist)">Erik Meijer</a></li>
<li><a href="Simon_Peyton_Jones" title="Simon Peyton Jones">Simon Peyton Jones</a></li>
<li><a href="David_Roundy" title="David Roundy">David Roundy</a></li>
<li><a href="Joe_Stoy" title="Joe Stoy">Joe Stoy</a></li>
<li><a href="Audrey_Tang" title="Audrey Tang">Audrey Tang</a></li>
<li><a href="Simon_Thompson_(professor)" title="Simon Thompson (professor)">Simon Thompson</a></li>
<li><a href="Philip_Wadler" title="Philip Wadler">Philip Wadler</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div><i>Italics</i> <b>= discontinued</b> • <b>° = <a href="Open-source_software" title="Open-source software">Open-source software</a></b><br><span class="noviewer" typeof="mw:File"></span> <b><a href="https://en.wikibooks.org/wiki/Haskell" class="extiw external" title="wikibooks:Haskell">Book</a></b> <span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category:Family</b> <span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category:Software</b></div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox" aria-labelledby="Haskell_Curry607" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Haskell_Curry607" style="font-size:114%;margin:0 4em"><a href="Haskell_Curry" title="Haskell Curry">Haskell Curry</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Namesake" title="Namesake">Namesakes</a>: <a href="Mathematics" title="Mathematics">mathematics</a>,<br><a href="Computer_programming" title="Computer programming">computer programming</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Curry%E2%80%93Howard_correspondence" title="Curry–Howard correspondence">Curry–Howard correspondence</a></li>
<li><a href="Currying" title="Currying">Currying</a></li>
<li><a href="Curry's_paradox" title="Curry's paradox">Curry's paradox</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language" title="Programming language">Programming languages</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><i><a href="BrookGPU" title="BrookGPU">Brook</a></i>°</li>
<li>°</li>
<li><a href="Haskell" title="Haskell">Haskell</a>°</li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div>
<ul><li><i>Italics</i> <b>= discontinued</b></li>
<li><b>° = <a href="Open-source_software" title="Open-source software">Open-source software</a></b><br><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category:Mathematical philosophers</b> <span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category:Mathematicians</b> <span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category:Logicians</b></li></ul>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox392" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Authority control databases: National </th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/1122372914">Germany</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-26" href="https://en.wikipedia.org/wiki/?title=Curry_(programming_language)&oldid=1297455112">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>